home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / nss / nsspkit.h < prev    next >
C/C++ Source or Header  |  2006-04-20  |  9KB  |  275 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is the Netscape security libraries.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Netscape Communications Corporation.
  18.  * Portions created by the Initial Developer are Copyright (C) 1994-2000
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *
  23.  * Alternatively, the contents of this file may be used under the terms of
  24.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  25.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  26.  * in which case the provisions of the GPL or the LGPL are applicable instead
  27.  * of those above. If you wish to allow use of your version of this file only
  28.  * under the terms of either the GPL or the LGPL, and not to allow others to
  29.  * use your version of this file under the terms of the MPL, indicate your
  30.  * decision by deleting the provisions above and replace them with the notice
  31.  * and other provisions required by the GPL or the LGPL. If you do not delete
  32.  * the provisions above, a recipient may use your version of this file under
  33.  * the terms of any one of the MPL, the GPL or the LGPL.
  34.  *
  35.  * ***** END LICENSE BLOCK ***** */
  36.  
  37. #ifndef NSSPKIT_H
  38. #define NSSPKIT_H
  39.  
  40. #ifdef DEBUG
  41. static const char NSSPKIT_CVS_ID[] = "@(#) $RCSfile: nsspkit.h,v $ $Revision: 1.6 $ $Date: 2005/01/20 02:25:49 $";
  42. #endif /* DEBUG */
  43.  
  44. /*
  45.  * nsspkit.h
  46.  *
  47.  * This file defines the types of the top-level PKI objects.
  48.  */
  49.  
  50. #ifndef NSSBASET_H
  51. #include "nssbaset.h"
  52. #endif /* NSSBASET_H */
  53.  
  54. PR_BEGIN_EXTERN_C
  55.  
  56. /*
  57.  * NSSCertificate
  58.  *
  59.  * This is the public representation of a Certificate.  The certificate
  60.  * may be one found on a smartcard or other token, one decoded from data
  61.  * received as part of a protocol, one constructed from constituent
  62.  * parts, etc.  Usually it is associated with ("in") a trust domain; as
  63.  * it can be verified only within a trust domain.  The underlying type
  64.  * of certificate may be of any supported standard, e.g. PKIX, PGP, etc.
  65.  *
  66.  * People speak of "verifying (with) the server's, or correspondant's, 
  67.  * certificate"; for simple operations we support that simplification
  68.  * by implementing public-key crypto operations as methods on this type.
  69.  */
  70.  
  71. struct NSSCertificateStr;
  72. typedef struct NSSCertificateStr NSSCertificate;
  73.  
  74. /*
  75.  * NSSUserCertificate
  76.  *
  77.  * A ``User'' certificate is one for which the private key is available.
  78.  * People speak of "using my certificate to sign my email" and "using
  79.  * my certificate to authenticate to (or login to) the server"; for
  80.  * simple operations, we support that simplification by implementing
  81.  * private-key crypto operations as methods on this type.
  82.  *
  83.  * The current design only weakly distinguishes between certificates
  84.  * and user certificates: as far as the compiler goes they're 
  85.  * interchangable; debug libraries only have one common pointer-tracker;
  86.  * etc.  However, attempts to do private-key operations on a certificate
  87.  * for which the private key is not available will fail.
  88.  *
  89.  * Open design question: should these types be more firmly separated?
  90.  */
  91.  
  92. typedef NSSCertificate NSSUserCertificate;
  93.  
  94. /*
  95.  * NSSPrivateKey
  96.  *
  97.  * This is the public representation of a Private Key.  In general,
  98.  * the actual value of the key is not available, but operations may
  99.  * be performed with it.
  100.  */
  101.  
  102. struct NSSPrivateKeyStr;
  103. typedef struct NSSPrivateKeyStr NSSPrivateKey;
  104.  
  105. /*
  106.  * NSSPublicKey
  107.  *
  108.  */
  109.  
  110. struct NSSPublicKeyStr;
  111. typedef struct NSSPublicKeyStr NSSPublicKey;
  112.  
  113. /*
  114.  * NSSSymmetricKey
  115.  *
  116.  */
  117.  
  118. struct NSSSymmetricKeyStr;
  119. typedef struct NSSSymmetricKeyStr NSSSymmetricKey;
  120.  
  121. /*
  122.  * NSSTrustDomain
  123.  *
  124.  * A Trust Domain is the field in which certificates may be validated.
  125.  * A trust domain will generally have one or more cryptographic modules
  126.  * open; these modules perform the cryptographic operations, and 
  127.  * provide the basic "root" trust information from which the trust in
  128.  * a specific certificate or key depends.
  129.  *
  130.  * A client program, or a simple server, would typically have one
  131.  * trust domain.  A server supporting multiple "virtual servers" might
  132.  * have a separate trust domain for each virtual server.  The separate
  133.  * trust domains might share some modules (e.g., a hardware crypto
  134.  * accelerator) but not others (e.g., the tokens storing the different
  135.  * servers' private keys, or the databases with each server's trusted
  136.  * root certificates).
  137.  *
  138.  * This object descends from the "permananet database" in the old code.
  139.  */
  140.  
  141. struct NSSTrustDomainStr;
  142. typedef struct NSSTrustDomainStr NSSTrustDomain;
  143.  
  144. /*
  145.  * NSSCryptoContext
  146.  *
  147.  * A Crypto Context is a short-term, "helper" object which is used
  148.  * for the lifetime of one ongoing "crypto operation."  Such an
  149.  * operation may be the creation of a signed message, the use of an
  150.  * TLS socket connection, etc.  Each crypto context is "in" a
  151.  * specific trust domain, and it may have associated with it a
  152.  * distinguished certificate, public key, private key, and/or
  153.  * symmetric key.  It can also temporarily hold and use temporary
  154.  * data (e.g. intermediate certificates) which is not stored
  155.  * permanently in the trust domain.
  156.  *
  157.  * In OO terms, this interface inherits interfaces from the trust
  158.  * domain, the certificates, and the keys.  It also provides
  159.  * streaming crypto operations.
  160.  *
  161.  * This object descends from the "temporary database" concept in the
  162.  * old code, but it has changed a lot as a result of what we've 
  163.  * learned.
  164.  */
  165.  
  166. typedef struct NSSCryptoContextStr NSSCryptoContext;
  167.  
  168. /*
  169.  * fgmr others
  170.  */
  171.  
  172. /* 
  173.  * NSSTime
  174.  *
  175.  * Unfortunately, we need an "exceptional" value to indicate
  176.  * an error upon return, or "no value" on input.  Note that zero
  177.  * is a perfectly valid value for both time_t and PRTime.
  178.  *
  179.  * If we were to create a "range" object, with two times for
  180.  * Not Before and Not After, we would have an obvious place for
  181.  * the somewhat arbitrary logic involved in comparing them.
  182.  *
  183.  * Failing that, let's have an NSSTime_CompareRanges function.
  184.  */
  185.  
  186. struct NSSTimeStr;
  187. typedef struct NSSTimeStr NSSTime;
  188.  
  189. struct NSSTrustStr;
  190. typedef struct NSSTrustStr NSSTrust;
  191.  
  192. /*
  193.  * NSSUsage
  194.  *
  195.  * This is trickier than originally planned; I'll write up a
  196.  * doc on it.
  197.  *
  198.  * We'd still like nsspki.h to have a list of common usages,
  199.  * e.g.:
  200.  *
  201.  *  extern const NSSUsage *NSSUsage_ClientAuth;
  202.  *  extern const NSSUsage *NSSUsage_ServerAuth;
  203.  *  extern const NSSUsage *NSSUsage_SignEmail;
  204.  *  extern const NSSUsage *NSSUsage_EncryptEmail;
  205.  *  etc.
  206.  */
  207.  
  208. struct NSSUsageStr;
  209. typedef struct NSSUsageStr NSSUsage;
  210.  
  211. /*
  212.  * NSSPolicies
  213.  *
  214.  * Placeholder, for now.
  215.  */
  216.  
  217. struct NSSPoliciesStr;
  218. typedef struct NSSPoliciesStr NSSPolicies;
  219.  
  220. /*
  221.  * NSSAlgorithmAndParameters
  222.  *
  223.  * Algorithm is an OID
  224.  * Parameters depend on the algorithm
  225.  */
  226.  
  227. struct NSSAlgorithmAndParametersStr;
  228. typedef struct NSSAlgorithmAndParametersStr NSSAlgorithmAndParameters;
  229.  
  230. /*
  231.  * NSSCallback
  232.  *
  233.  * At minimum, a "challenge" method and a closure argument.
  234.  * Usually the challenge will just be prompting for a password.
  235.  * How OO do we want to make it?
  236.  */
  237.  
  238. typedef struct NSSCallbackStr NSSCallback;
  239.  
  240. struct NSSCallbackStr {
  241.     /* Prompt for a password to initialize a slot.  */
  242.     PRStatus (* getInitPW)(NSSUTF8 *slotName, void *arg, 
  243.                            NSSUTF8 **ssoPW, NSSUTF8 **userPW); 
  244.     /* Prompt for oldPW and newPW in order to change the 
  245.      * password on a slot.  
  246.      */
  247.     PRStatus (* getNewPW)(NSSUTF8 *slotName, PRUint32 *retries, void *arg,
  248.                           NSSUTF8 **oldPW, NSSUTF8 **newPW); 
  249.     /* Prompt for slot password.  */
  250.     PRStatus (* getPW)(NSSUTF8 *slotName, PRUint32 *retries, void *arg,
  251.                        NSSUTF8 **password); 
  252.     void *arg;
  253. };
  254.  
  255. /* set errors - user cancelled, ... */
  256.  
  257. typedef PRUint32 NSSOperations;
  258. /* 1) Do we want these to be preprocessor definitions or constants? */
  259. /* 2) What is the correct and complete list? */
  260.  
  261. #define NSSOperations_ENCRYPT           0x0001
  262. #define NSSOperations_DECRYPT           0x0002
  263. #define NSSOperations_WRAP              0x0004
  264. #define NSSOperations_UNWRAP            0x0008
  265. #define NSSOperations_SIGN              0x0010
  266. #define NSSOperations_SIGN_RECOVER      0x0020
  267. #define NSSOperations_VERIFY            0x0040
  268. #define NSSOperations_VERIFY_RECOVER    0x0080
  269.  
  270. struct NSSPKIXCertificateStr;
  271.  
  272. PR_END_EXTERN_C
  273.  
  274. #endif /* NSSPKIT_H */
  275.